const express = require("express");
// 引入mongoose模块
const mongoose = require('mongoose');
const app = express();


// 操作数据  增删改查   顺序问题   必须是先连接数据库再进行数据操作   改为promise对象
const promise = new Promise((resolve, reject) => {
    mongoose.set('useCreateIndex', true);
    // 连接数据库
    mongoose.connect("mongodb://localhost:27017/mongoose_test", {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    mongoose.connection.once('open', err => {
        if (!err) {
            console.log('数据库连接成功！！');
            resolve();
        } else {
            console.log(err);
            reject(err);
        }
    })
});
(async () => {
    await promise; //数据库连接成功
    const Schema = mongoose.Schema; //获取schema模式对象
    const studentsSchema = new Schema({
        name: {
            type: String,
            unique: false, //是否唯一
            required: true, //是不是必须
            default: '栋儿啊'
        },
        age: Number,
        sex: String,
        stu_id: {
            type: String,
            unique: true, //是否唯一
            required: true, //是不是必须
        },
        createDate: {
            type: Date,
            default: Date.now()
        },
        info: Schema.Types.Mixed //所有数据类型都可以


    }) //创建约束条件

    // students （表  集合名）  一条一条的数据document   document中有一个个字段 键名
    /* 
    name String  必须传 （required） 不是独一无二
    age  Number  必须传   不是独一无二
    sex  String  必须传   不是独一无二
    stu_id  String  必须传 独一无二
    createDate  Date   默认值  Date.now  不是独一无二
    info  所有数据类型 
    
    

    Schema——type
    String
    Number
    Date
    Buffer
    Boolean
    Mixed
    Array
    ObjectId
    */
    // 创建模型对象 model 集合   集合和文档的约束条件联系
    const Students = mongoose.model("students", studentsSchema);
    // 创建文档对象  在students这个表中插入一条数据
    const s1 = new Students({
        name: 'tom',
        age: 12,
        sex: '男',
        stu_id: '03',
        createDate: Date.now(),
        info: '吃饭睡觉打豆豆'
    })
    // 保存到数据库
    s1.save(err => {
        if (!err) console.log('数据保存成功');
        else console.log(err);
    })

    // 连接数据库 创建约束对象  将约束对象和集合（model）联系起来  创建文档 存储文档


    // 体验到了约束条件的重要性



})();











app.get("/test", (req, res) => {
    res.send("xxx");
});
app.listen(8080, err => {
    if (!err) console.log("server启动");
    else console.log(err);
});
// 1.初始化服务器
// 2.将数据库和服务器联系
// mongoose@5